package battleenum

// @schema_go
type EffectClassId int

const (
	EffectClassId_General EffectClassId = iota
	// 应用行为
	EffectClassId_ApplyBehavior
	EffectClassId_CreateHealer
	EffectClassId_CreatePersistent
	EffectClassId_CreateUnit
	EffectClassId_Custom
	EffectClassId_Damage
	EffectClassId_EnumArea
	EffectClassId_Force
	EffectClassId_LaunchMissile
	EffectClassId_ModifyUnit
	EffectClassId_RemoveBehavior
	EffectClassId_Set
	EffectClassId_TransferBehavior
)

// @schema_go
type EffectProp int

// 单位的属性
const (
	// 是否完成
	EffectProp_Destroy EffectProp = iota
	// 效果-伤害总量
	// 效果-伤害
	EffectProp_DamageTotal
	// 效果-伤害的状态
	// 效果-伤害
	EffectProp_DamageState
	// 效果-修改后的导弹id
	// 效果-发射导弹
	EffectProp_Missile
	// 效果-发射导弹-发射单位
	EffectProp_MissileLaunchUnit
	// 效果-发射导弹-轰击位置
	EffectProp_MissileImpactPoint
	// 效果-发射导弹-轰击单位
	EffectProp_MissileImpactUnit
	// 效果-位置
	EffectProp_Position
	// 效果-面向
	EffectProp_Face
)

// @alias 效果历史
// @schema_go
type E效果历史 int

const (
	E效果历史_追溯 E效果历史 = iota
	E效果历史_伤害
	E效果历史_治疗
	E效果历史_死亡
	E效果历史_修改
)

// @schema_go
type EffectUnit int

const (
	EffectUnit_无 EffectUnit = iota
	EffectUnit_施法者
	EffectUnit_施法者外层
	EffectUnit_来源
	EffectUnit_来源外层
	EffectUnit_目标
	EffectUnit_目标外层
	// todo: 确定起源的定义
	// 场景: 单位A召唤出单位B，单位B释放技能，起源为单位A？
	EffectUnit_起源
)

// @schema_go
type EffectScope int

const (
	// 所在效果
	EffectScope_效果 EffectScope = iota
	EffectScope_施法者
	EffectScope_施法者外层
	EffectScope_来源
	EffectScope_来源外层
	EffectScope_目标
	EffectScope_目标外层
	EffectScope_起源
	// 当效果为【发射单位】时，可获得被发射单位，否则为空
	EffectScope_被发射单位
)

type EffectTarget int

const (
	EffectTarget_点 EffectTarget = iota
	EffectTarget_单位
	EffectTarget_单位或点
)

// @schema_go
type EffectLocation int

const (
	// 无
	EffectLocation_无 EffectLocation = iota

	// 施法者外层点
	EffectLocation_施法者外层点

	// 施法者外层单位
	EffectLocation_施法者外层单位

	// 施法者外层单位或点
	EffectLocation_施法者外层单位或点

	// 施法者点
	EffectLocation_施法者点

	// 施法单位
	EffectLocation_施法单位

	// 施法单位或点
	EffectLocation_施法单位或点

	// 起源点
	EffectLocation_起源点

	// 起源单位
	EffectLocation_起源单位

	// 起源单位或点
	EffectLocation_起源单位或点

	// 外层点
	EffectLocation_外层点

	// 外层单位
	EffectLocation_外层单位

	// 外层单位或点
	EffectLocation_外层单位或点

	// 源点
	EffectLocation_源点

	// 源单位
	EffectLocation_源单位

	// 源单位或点
	EffectLocation_源单位或点

	// 目标外层点
	EffectLocation_目标外层点

	// 目标外层单位
	EffectLocation_目标外层单位

	// 目标外层单位或点
	EffectLocation_目标外层单位或点

	// 目标点
	EffectLocation_目标点

	// 目标单位
	EffectLocation_目标单位

	// 目标单位或点
	EffectLocation_目标单位或点
)

// @schema_go
type EffectPlayer int

const (
	// 无
	EffectPlayer_无 EffectPlayer = iota

	// 施法者
	EffectPlayer_施法者

	// 施法者外层
	EffectPlayer_施法者外层

	// 创建者
	EffectPlayer_创建者

	// 敌对的
	EffectPlayer_敌对的

	// 中立玩家
	EffectPlayer_中立玩家

	EffectPlayer_来源
	EffectPlayer_来源外层

	// 目标
	EffectPlayer_目标

	// 目标外层
	EffectPlayer_目标外层

	// 起源玩家
	EffectPlayer_起源
)

// @schema_go
type EffectTimeScale int

const (
	EffectTimeScale_无 EffectTimeScale = iota
	// 施法者
	EffectTimeScale_施法者

	// 全局
	EffectTimeScale_全局

	// 目标
	EffectTimeScale_目标
)

// @schema_go
type S伤害类型 int

const (
	// 近战
	S伤害类型_近战 S伤害类型 = iota

	// 远程
	S伤害类型_远程

	// 法术
	S伤害类型_法术

	// 溅射
	S伤害类型_溅射
)

// @schema_go
type S效果搜索标旗 int

const (
	S效果搜索标旗_无 S效果搜索标旗 = iota
)

// @schema_go
type E发射弹药标旗 int

const (
	E发射弹药标旗_无 E发射弹药标旗 = iota
)

// @schema_go
type E效果发射策略 int

const (
	E效果发射策略_新建单位 E效果发射策略 = iota
	E效果发射策略_现存单位
)

// @schema_go --EnumToString=true
type S伤害标旗 int

const (
	// 标记后目标单位立即死亡，
	S伤害标旗_立即死亡 S伤害标旗 = 0

	// 无伤害响应
	// 标记后不会产生伤害响应
	S伤害标旗_无伤害响应 S伤害标旗 = 1

	// 无闪避响应
	// 标记后不会产生闪避响应
	S伤害标旗_无闪避响应 S伤害标旗 = 2

	// 所造成的伤害无上限
	S伤害标旗_所造成的伤害无上限 S伤害标旗 = 3

	// 所造成的伤害无下限
	S伤害标旗_所造成的伤害无下限 S伤害标旗 = 4

	// 无法闪避
	S伤害标旗_无法闪避 S伤害标旗 = 5

	// 致命攻击剩余1点伤害
	S伤害标旗_存活 S伤害标旗 = 6

	// 无制造伤害加成（按比例的）(Scaled)
	S伤害标旗_NoScaledDealtBonus S伤害标旗 = 7

	// 无制造伤害加成（未按比例的）(Unscaled)
	S伤害标旗_NoUnscaledDealtBonus S伤害标旗 = 8

	// 不可吸收能量
	S伤害标旗_NoVitalAbsorbEnergy S伤害标旗 = 9

	// 不可吸收生命
	S伤害标旗_NoVitalAbsorbLife S伤害标旗 = 10

	// 不可吸收护盾
	S伤害标旗_NoVitalAbsorbShields S伤害标旗 = 11

	// 禁止伤害量
	// 伤害量仅作为效果其他伤害的计算来源
	S伤害标旗_禁止伤害量 S伤害标旗 = 12
)

// @schema_go
type DamageLocation int

const (
	// 攻击方
	DamageLocation_攻击方 DamageLocation = iota

	// 防御方
	DamageLocation_防御方
)

// 伤害值
// @schema_go
type DamageValue int

const (
	DamageValue_初始值 DamageValue = iota

	// 行动后: 暴击/破击计算后的值
	DamageValue_行动后

	DamageValue_最终值
)

// @schema_go
type DeathType int

const (
	///无
	DeathType_无 DeathType = iota
	DeathType_普通
	///爆炸
	DeathType_爆炸
	///取消
	DeathType_取消
	///拆分
	DeathType_拆分
	///吃
	DeathType_吃
	///电击
	DeathType_电击
	///砍杀
	DeathType_砍杀
	///火烧
	DeathType_火烧
	///冻结
	DeathType_冻结
	///轰击
	DeathType_轰击
	///变形
	DeathType_变形
	///移除
	DeathType_移除
	///回收
	DeathType_回收
	///无声杀敌
	DeathType_无声杀敌
	///压碎
	DeathType_压碎
	///超时
	DeathType_超时
	///训练取消
	DeathType_训练取消
	///训练完成
	DeathType_训练完成
	///建设中
	DeathType_建设中
)

// @schema_go --EnumToString=true
type EffectApplyForceFlag int

const (
	// 忽略加速度
	EffectApplyForceFlag_NoAcceleration EffectApplyForceFlag = iota

	// 使用父效果的方向
	// 可用于平行力场(枚举区域)
	EffectApplyForceFlag_UseParentDirection
)

// @schema_go --EnumToString=true
type X效果_应用行为_标旗 int

const (
	// 使用持续时间
	X效果_应用行为_标旗_允许数量 X效果_应用行为_标旗 = iota + 1
	X效果_应用行为_标旗_允许持续时间
)

// @schema_go
type CreatorInfoKind int

const (
	// 技能
	CreatorInfoKind_Abil CreatorInfoKind = iota
	// 行为
	CreatorInfoKind_Behavior
	// 效果
	CreatorInfoKind_Effect
	// 单位
	CreatorInfoKind_Unit
	// 武器
	CreatorInfoKind_Weapon
	// 无
	CreatorInfoKind_None
)

// @schema_go --EnumToString=true
type EffectHealerFlag int

const (
	// 被引导
	EffectHealerFlag_Channeled EffectHealerFlag = iota

	// 引导中
	EffectHealerFlag_Channeling

	// 抑制能量恢复
	EffectHealerFlag_SuppressEnergyRegen

	// 抑制生命恢复
	EffectHealerFlag_SuppressLifeRegen

	// 抑制护盾恢复
	EffectHealerFlag_SuppressShieldsRegen
)

// @schema_go --EnumToString=true
type CreatePersistentFlag int

const (
	// 被引导
	CreatePersistentFlag_Channeled CreatePersistentFlag = iota

	// 引导
	CreatePersistentFlag_Channeling

	// 失败
	CreatePersistentFlag_EffectFailure

	// 成功
	CreatePersistentFlag_EffectSuccess

	// 孤立参数
	CreatePersistentFlag_OrphanParams

	// 持续存在直到被摧毁
	// 当该标旗被启用时， “周期计数”会被忽略， 该效果将持续存在直到某一个周期性验证器失效或者该效果被摧毁。
	CreatePersistentFlag_PersistUntilDestroyed

	// 随机效果
	CreatePersistentFlag_RandomEffect

	// 随机偏移
	CreatePersistentFlag_RandomOffset

	// 随机周期
	CreatePersistentFlag_RandomPeriod
)

// 随机模式
// @schema_go
type RandMode int

const (
	// 乱序
	RandMode_Shuffle RandMode = iota
	// 随机
	RandMode_Random
	// 随机不重复
	RandMode_RandomNoRepeat
)

// @schema_go --EnumToString=true
type EffectRemoveBehaviorFlag int

const (
	// 移除指定极性
	EffectRemoveBehaviorFlag_Alignment EffectRemoveBehaviorFlag = iota
	// 移除指定类别
	EffectRemoveBehaviorFlag_Category
	// 移除指定分类
	EffectRemoveBehaviorFlag_Class
)

// 目标位置
// @schema_go
type TargetLocation int

const (
	// 单位
	TargetLocation_Unit TargetLocation = iota
	//
	TargetLocation_UnitOrPoint
	//
	TargetLocation_Point
)

// @schema_go --EnumToString=true
type EffectCmdFlags int

const (
	// 备用
	EffectCmdFlags_Alternate EffectCmdFlags = iota
	// 优先取得
	EffectCmdFlags_Preempt
	// 在队列中
	EffectCmdFlags_Queued
	// 设置自动施放
	EffectCmdFlags_SetAutoCast
	// 设置自动施放开启
	EffectCmdFlags_SetAutoCastOn
	// 智能点击
	EffectCmdFlags_SmartClick
	// 智能集结
	EffectCmdFlags_SmartRally
	// 子组
	EffectCmdFlags_Subgroup
)

// @schema_go --EnumToString=true
type EffectCancelOrderFlag int

const (
	// 活动
	EffectCancelOrderFlag_Active EffectCancelOrderFlag = iota
	// 在队列中
	EffectCancelOrderFlag_Queued
	// 不可打断
	EffectCancelOrderFlag_Uninterruptible
)

// @schema_go
// @schema_ts
// @cache_ts
type ActorSubEffect string

const (
	ActorSubEffect_任意 ActorSubEffect = "任意"

	// 中止效果-所在域：效果
	// 效果被中止时
	// 创建持续性效果-效果被中止后触发
	ActorSubEffect_中止 ActorSubEffect = "中止"

	// 结束-所在域：效果
	// 创建持续性效果-周期完成后, [结束延时]结束后触发
	ActorSubEffect_过期 ActorSubEffect = "过期"

	// 轰击-所在域：效果
	// 效果轰击目标时
	ActorSubEffect_轰击 ActorSubEffect = "轰击"

	// 发射-所在域：效果
	// 效果发射目标时
	ActorSubEffect_发射 ActorSubEffect = "发射"

	// 周期-所在域：效果
	// 创建持续性效果-周期性触发
	ActorSubEffect_周期 ActorSubEffect = "周期"

	// 开始-所在域：效果
	// 效果开始时触发
	ActorSubEffect_开始 ActorSubEffect = "开始"

	ActorSubEffect_完成 ActorSubEffect = "完成"
	ActorSubEffect_闪避 ActorSubEffect = "闪避"
	ActorSubEffect_伤害 ActorSubEffect = "伤害"
)

// @schema_go --EnumToString=true
type C创建单位标旗 int

const (
	C创建单位标旗_诞生 C创建单位标旗 = iota
)

// @schema_go  --EnumToString=true
// @schema_ts
// @cache_ts
type E效果阶段 int

// 移动器的阶段
const (
	E效果阶段_未知 E效果阶段 = 0
	E效果阶段_开始 E效果阶段 = 1
	E效果阶段_取消 E效果阶段 = 2
	E效果阶段_完成 E效果阶段 = 3
	// 取消或完成都算结束
	E效果阶段_结束 E效果阶段 = 4
	E效果阶段_周期 E效果阶段 = 5
	E效果阶段_发射 E效果阶段 = 6
	E效果阶段_轰击 E效果阶段 = 7
	E效果阶段_碰撞 E效果阶段 = 8

	E效果阶段_伤害_闪避   E效果阶段 = 10
	E效果阶段_伤害_暴击   E效果阶段 = 11
	E效果阶段_伤害_破甲   E效果阶段 = 12
	E效果阶段_伤害_格挡   E效果阶段 = 13
	E效果阶段_伤害_反击   E效果阶段 = 14
	E效果阶段_伤害_初始伤害 E效果阶段 = 15
	E效果阶段_伤害_剩余伤害 E效果阶段 = 16
	E效果阶段_伤害_承受伤害 E效果阶段 = 17
	E效果阶段_伤害_吸取伤害 E效果阶段 = 18
)

// @schema_go
// @schema_ts
// @cache_ts
// @alias 效果伤害创建时机
type E效果伤害创建时机 int

const (
	E效果伤害创建时机_闪避   E效果伤害创建时机 = 10
	E效果伤害创建时机_暴击   E效果伤害创建时机 = 11
	E效果伤害创建时机_破甲   E效果伤害创建时机 = 12
	E效果伤害创建时机_格挡   E效果伤害创建时机 = 13
	E效果伤害创建时机_反击   E效果伤害创建时机 = 14
	E效果伤害创建时机_初始伤害 E效果伤害创建时机 = 15
	E效果伤害创建时机_剩余伤害 E效果伤害创建时机 = 16
	// 默认位置为目标单位
	E效果伤害创建时机_承受伤害 E效果伤害创建时机 = 17
	E效果伤害创建时机_吸取伤害 E效果伤害创建时机 = 18
)

// @schema_go
// @schema_ts
// @cache_ts
// @alias 效果修改单位创建时机
type E效果修改单位创建时机 int

const (
	E效果修改单位创建时机_开始 E效果修改单位创建时机 = 1
	E效果修改单位创建时机_完成 E效果修改单位创建时机 = 3
)

// @schema_go
// @schema_ts
// @cache_ts
// @alias 效果发射单位创建时机
type E效果发射单位创建时机 int

const (
	E效果发射单位创建时机_开始 E效果发射单位创建时机 = 1
	E效果发射单位创建时机_取消 E效果发射单位创建时机 = 2
	E效果发射单位创建时机_完成 E效果发射单位创建时机 = 3
	E效果发射单位创建时机_结束 E效果发射单位创建时机 = 4
	E效果发射单位创建时机_发射 E效果发射单位创建时机 = 6
	E效果发射单位创建时机_轰击 E效果发射单位创建时机 = 7
	E效果发射单位创建时机_碰撞 E效果发射单位创建时机 = 8
)

// @schema_go
// @schema_ts
// @cache_ts
// @alias 效果发射单位销毁时机
type E效果发射单位销毁时机 int

const (
	E效果发射单位销毁时机_无  E效果发射单位销毁时机 = 0
	E效果发射单位销毁时机_取消 E效果发射单位销毁时机 = 2
	E效果发射单位销毁时机_完成 E效果发射单位销毁时机 = 3
	E效果发射单位销毁时机_结束 E效果发射单位销毁时机 = 4
	E效果发射单位销毁时机_轰击 E效果发射单位销毁时机 = 7
	E效果发射单位销毁时机_碰撞 E效果发射单位销毁时机 = 8
)
